package com.itheima.Controller;

import com.itheima.entity.Dept;
import com.itheima.entity.Result;
import com.itheima.Service.DeptService;
import jakarta.servlet.http.HttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

//请求处理类
@RestController
@Slf4j
@RequestMapping("/depts")
public class DeptController {
    //    @RequestMapping("/depts")
//    public List<Dept> getAll(){
//     //1.加载并读取dept.txt文件中的数据
//        //通过类加载器可以获取类路径下的所有资源
//        InputStream input = this.getClass().getClassLoader().getResourceAsStream("dept.txt");
//        List<String> strings = IOUtils.readLines(input, "UTF-8");
//        //2.解析文本数据，并封装成集合
//        List <Dept> depts=strings.stream().map((str)->{
//            String[] parts = str.split(",");
//            Integer id = Integer.valueOf(parts[0]);
//            String name=parts[1];
//            LocalDateTime updateTime = LocalDateTime.parse(parts[2], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//            return new Dept(id,name,updateTime);
//        }).toList();
//        //3.响应数据（json）
//        return depts;
//    }
//@GetMapping("/depts")//与@RequestMapping(value = "/depts",method = RequestMethod.GET)等价
//public Result getAll(){
//    //1.加载并读取dept.txt文件中的数据
//    //通过类加载器可以获取类路径下的所有资源
//    InputStream input = this.getClass().getClassLoader().getResourceAsStream("dept.txt");
//    List<String> strings = IOUtils.readLines(input, "UTF-8");
//    //2.解析文本数据，并封装成集合
//    List <Dept> depts=strings.stream().map((str)->{
//        String[] parts = str.split(",");
//        Integer id = Integer.valueOf(parts[0]);
//        String name=parts[1];
//        LocalDateTime updateTime = LocalDateTime.parse(parts[2], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
//        return new Dept(id,name,updateTime);
//    }).toList();
//    //3.响应数据（json）
//    return Result.success(depts);
//}
//private DeptService deptSrevice= new DeptServiceDao();
    @Autowired //从IOC容器中自动寻找Bean对象，为该变量进行赋值
    private DeptService deptService;
    @GetMapping//与@RequestMapping(value = "/depts",method = RequestMethod.GET)等价
    public Result list() {
        //1. 调用service获取数据
        List<Dept> depts = deptService.list();
        //3.响应数据（json）
        return Result.success(depts);
    }

  /*  //@RequestMapping(value = "/depts",method = RequestMethod.DELETE)
    @DeleteMapping("/depts")
    //原始方式获取请求参数
    public Result delete(HttpServletRequest request) {
        String id = request.getParameter("id");
        int idInt = Integer.parseInt(id);
        System.out.println("id-----------------------------------"+idInt);
        return Result.success();
    }*/
    //  方式二：通过spring提供的@RequestParam注解获取请求参数
    //@RequestParam添加之后，前端必须传递参数否则会报错400，Bad Request
  /*@DeleteMapping("/depts")
  public Result delete(@RequestParam("id") Integer deptId) {
      System.out.println("deptId = " + deptId);
      return Result.success();
  }*/
    //获取请求参数方式三：··
  @DeleteMapping
  public Result delete(Integer id) {
      log.info("deptId ={}",id);
      //调用Service层的删除方法
      deptService.delete(id);
      return Result.success();
  }
  @PostMapping
  //@RequestBody用于接收请求体（json数据类型）要求：形参必须是实体对象，对象中的属性名必须与请求参数名一致
    public Result save(@RequestBody Dept dept) {
      // 调用Service层的新增方法
       //try {
          deptService.save(dept);
     // } catch (Exception e) {
          //throw new RuntimeException(e);
         // return Result.error("出错了，请联系管理员");
      //}
      log.info("deptId ={}",dept);
      return Result.success();
  }
  //回显    @PathVariable用于接收路径参数值
  @GetMapping("/{id}")
  public Result getById(@PathVariable Integer id) {
      log.info("deptId ={} ",id);
      // 调用Service层方法
       Dept dept=deptService.getById(id);
      return Result.success(dept);
  }
  // 根据id修改部门信息
  @PutMapping
  public Result updateDept(@RequestBody Dept dept) {
     log.info("dept={} ",dept);
      //调用Service层方法
      deptService.update(dept);
      return Result.success();
  }
}
